# coding:utf-8
'''
Created on 2011-3-5
学习and和or。在Python中，and和or执行布尔逻辑运算（Python中不是和Java一样采用&&、||
来完成逻辑运算）。但是它们并不返回布尔值，而是返回它们实际进行比较的值之一。
在Python中0、''、[]、()、{}、None、False为假，其余为真。
@author: Administrator
'''

#===============================================
# and：使用and时从左到右计算表达式的值，如果某个表达式
# 的值为假，则and返回第一个假值。如果所有值都为真，则
# 返回最后一个真值。
#===============================================
print 'a' and 'b' # 'b'
print '' and 'b' # ''
print 'a' and 'b' and 'c' # 'c'
print True and False # False
print True and True # True

#===============================================
# or：使用or时从左到右计算表达式的值，如果某个表达式
# 的值为真，则or返回这个为真的值，并会停止继续计算。
# 如果所有值都为假则返回最后一个假值。
#===============================================
print 'a' or 'b'
print '' or 'a'
def fx():
    print 'a fx'
    return 1
print 'a' or fx() # fx函数并不会执行，因为'a'为真值，当or计算'a'为真时就停止计算，所以fx()不会执行

#===============================================
# and-or技巧：Python中没有Java中的boolean ? a ： b
# 的三元运算符，但是可以通过(bool and [a] or [b])[0]来实现。
#===============================================
a = 'A'
b = 'B'
print (False and [a] or [b])[0] # 'B'
print (True and [a] or [b])[0] # 'A'